import dayjs from 'dayjs'
import { TimeFormat } from '../enums/time-format.enum'
import { PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, Column, AfterLoad } from 'typeorm'

export abstract class CommonEntity {
  /** 主键，UUID格式（防推算） */
  @PrimaryGeneratedColumn('uuid')
  id: string

  /** 创建者 */
  @Column({ comment: '创建者', name: 'create_by', default: null })
  createBy: string

  /** 更新者 */
  @Column({ comment: '更新者', name: 'update_by', default: null })
  updateBy: string // 未指定 type 时，字符串默认映射为 varchar(255)

  /** 特殊列，自动为实体插入日期。无需设置此列，该值将自动设置 */
  @CreateDateColumn({ name: 'create_time', comment: '创建时间', update: false, type: 'timestamp' })
  createTime: Date | string

  /** 特殊列，在每次调用实体管理器或存储库的 save 时，自动更新实体日期。无需设置此列，该值将自动设置 */
  @UpdateDateColumn({ name: 'update_time', comment: '更新时间', type: 'timestamp' })
  updateTime: Date | string

  @AfterLoad()
  afterLoad() {
    this.createTime = dayjs(this.createTime).format(TimeFormat.DATETIME_DASH)
    this.updateTime = dayjs(this.updateTime).format(TimeFormat.DATETIME_DASH)
  }
}
